//捕获器的默认行文
// const target = {
//   foo:"bar"
// }
// const handler = {
//   get(trapTarget,property,receiver){
//     console.log(trapTarget === target);//true
//     console.log(property);//foo
//     console.log(receiver === proxy);//true
//     //重建被捕获方法的原始行为
//     return trapTarget[property];
//   }
// }
// const proxy =  new Proxy(target,handler);
// console.log(target.foo);//bar
// console.log(proxy.foo);//bar

//反射Api
// const target = {
//   'foo':'bar'
// }
// const handler = {
//   get(){
//     // return Reflect.get(...arguments)
//     return Reflect.get
//   }
// }
// let proxy = new Proxy(target,handler);
// proxy.foo = 'smith';
// console.log(target.foo);//smith

//不需要处理程序对象
// const target = {
//   foo: "bar",
// };
// const proxy = new Proxy(target,Reflect);
// proxy.foo = 'alice';
// console.log(proxy.foo);//alice
// console.log(target.foo);//alice

//反射API样板语法

const target = {
  foo:'bar',
  qxz:'smith'
}
const handler = {
  get(target,property,receiver){
    let decoration = ''
    if(property === 'foo'){
      decoration = '!!!';
    }
    return Reflect.get(...arguments) + decoration;
  }
}
let proxy = new Proxy(target,handler)
console.log(proxy.foo);//bar!!!
console.log(target.foo);//bar
console.log(proxy.qxz);//smith
console.log(target.qxz);//smith